#include "UTHArray.h"
#include <boost/foreach.hpp>

namespace phnq
{
	namespace uth
	{
		UTHArray::UTHArray() : UTHValue(UTH_VALUE_TYPE_ARRAY)
		{
		}
	
		UTHArray::~UTHArray()
		{
			for(int i=0; i<values.size(); i++)
			{
				values[i]->release();
			}
		}
	
		void UTHArray::add(UTHValue *value)
		{
			boost::mutex::scoped_lock scoped_lock(writeMutex);
        
			values.push_back(value);
			value->retain();
		}

		UTHValue* UTHArray::get(int index)
		{
			return values[index];
		}

		int UTHArray::length()
		{
			return values.size();
		}

		void UTHArray::serialize(stringbuf *sb)
		{
			sb->sputc('[');

			bool isFirst = true;
		    foreach(UTHValue *value, values)
		    {
				if(isFirst)
					isFirst = false;
				else
					sb->sputc(',');
				
				value->serialize(sb);
		    }

			sb->sputc(']');
		}
	}
}
